home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / programming / arexx / rexxbgui / menu.rexx < prev    next >
OS/2 REXX Batch file  |  1999-06-14  |  3KB  |  103 lines

  1. /* REXX script for rexxbgui.library: menus */
  2.  
  3. if ~show('l','rexxbgui.library') then do
  4.     if ~addlib('rexxbgui.library',0,-30) then do
  5.         exit(20)
  6.     end
  7.     else nop
  8. end
  9. else nop
  10.  
  11. call bguiopen() /* causes error 12 if it did not work */
  12. /* supply a second argument for a '0' return code instead of an ARexx
  13.    error */
  14.  
  15. signal on syntax /* important: bguiclose() MUST be called */
  16. signal on halt
  17. signal on break_c
  18.  
  19. esc='1B'x
  20. lf='0A'x
  21. cr='0D'x
  22. grspace.narrow=-1
  23. grspace.normal=-2
  24. grspace.wide=-3
  25. FixMinSize=bguilayout(LGO_FixMinWidth,1,LGO_FixMinHeight,1)
  26.  
  27. /* using ARexx feature: ,<newline> is translated to nothing */
  28. /* the || are essential - any added space will cause trouble */
  29. /* redefining the same ID makes previous buttons unaccessible */
  30. /* do not redefine winclose etc. */
  31.  
  32. g=bguivgroup(,
  33.     bguiinfo(,
  34.         'info',,'cbRexxBGUI-b: menus',
  35.     )||bguilayout(LGO_FixMinHeight,1)||,
  36.     bguiinfo('lastsel','Last selection','--- None yet ---')||bguilayout(LGO_FixMinHeight,1)||,
  37.     bguihgroup(,
  38.         bguibutton('sub1','Same as subitem #_1')||,
  39.         bguibutton('sub2','Same as subitem #_2'),
  40.     )||bguilayout(LGO_FixMinHeight,1)||,
  41.     bguihgroup(,
  42.         bguivarspace(50)||,
  43.         bguibutton('quit','_Quit')||,
  44.         bguivarspace(50),
  45.     )||bguilayout(LGO_FixMinHeight,1),
  46. ,grspace.normal,grspace.normal)
  47.  
  48. menu=bguimenu(1,'Project')||,
  49.       bguimenu(2,'About...','?',,,id.about)||,
  50.       bguimenu(2)||,
  51.       bguimenu(2,'Quit','Q',,,id.quit)||,
  52.      bguimenu(1,'Testing')||,
  53.       bguimenu(2,'Have your cake',,'CHECKIT CHECKED','10'b,id.hyc)||,
  54.       bguimenu(2,'Eat it too',,'CHECKIT','01'b,id.eit)||,
  55.       bguimenu(2,'Disable all subitems','D','CHECKIT TOGGLE',,id.dissub)||,
  56.       bguimenu(2)||,
  57.       bguimenu(2,'Subitems',,,,id.sub)||,
  58.        bguimenu(3,'Subitem #1','1',,,id.sub1)||,
  59.        bguimenu(3,'Subitem #2','2',,,id.sub2)||,
  60.        bguimenu(3,'Subitem #3','3','DISABLED',,id.sub3)
  61.  
  62. a=bguiwindow('Menu',g,'-25','-',,arg(1),'mouse',menu)
  63.  
  64. if bguiwinopen(a)=0 then bguierror(12)
  65. id=0
  66. do while bguiwinwaitevent(a,'ID')~=id.winclose
  67.     select
  68.         when id=id.winactive then nop
  69.         when id=id.wininactive then nop
  70.         when id=id.about then do
  71.             call bguiset(obj.lastsel,a,INFO_TextFormat,'About')
  72.             call bguireq(esc'cSimple menu example'||'0a'x'for RexxBGUI by Jilles Tjoelker','*_OK',,a)
  73.         end
  74.         when id=id.hyc then call bguiset(obj.lastsel,a,INFO_TextFormat,'Have your cake')
  75.         when id=id.eit then call bguiset(obj.lastsel,a,INFO_TextFormat,'Eat it too')
  76.         when id=id.dissub then do
  77.             state=bguiwinitemchecked(a,id)
  78.             call bguiwindisablemenu(a,id.sub,state)
  79.             call bguiset(obj.sub1,a,GA_Disabled,state)
  80.             call bguiset(obj.sub2,a,GA_Disabled,state)
  81.             if state=1 then state='ON'; else state='OFF'
  82.             call bguiset(obj.lastsel,a,INFO_TextFormat,'Disable all subitems' state)
  83.         end
  84.         when id=id.sub1 then call bguiset(obj.lastsel,a,INFO_TextFormat,'Subitem #1')
  85.         when id=id.sub2 then call bguiset(obj.lastsel,a,INFO_TextFormat,'Subitem #2')
  86.         when id=id.quit then leave
  87.         when id=id.winclose then nop
  88.         otherwise nop
  89.     end
  90. end
  91. rc=0
  92.  
  93. syntax:
  94. if rc~=0 then say '+++ ['rc']' errortext(rc) 'at line' sigl
  95. call bguiclose()
  96. exit 0
  97.  
  98. break_c:
  99. halt:
  100. rc=0
  101. say '+++ Break at line' sigl
  102. signal syntax
  103.